Bash가 로그인 셸로 시작되면 먼저 /etc/profile을 읽고 실행합니다. 이어서 ~/.bash_profile과 ~/.bash_login 및 ~/.profile을 차례로 확인해 읽을 수 있는 첫 번째 파일을 실행합니다.
로그인 셸이 종료될 때 ~/.bash_logout 파일이 있으면 그 안의 명령을 실행합니다.
로그인 셸 모드를 따로 두는 이유는 사용자가 처음 로그인할 때만 필요한 작업과 환경 변수 설정이 있기 때문입니다. 그래서 유닉스 셸에는 로그인 모드가 필요합니다.
로그인 셸로 시작하는 방법
argv[0]의 첫 글자가 하이픈(-)인 경우입니다. 전통적인 유닉스 셸은 login 프로그램을 통해 이렇게 시작됩니다.-l 옵션으로 Bash를 실행합니다.--login 옵션으로 Bash를 실행합니다.로그인 셸인지 확인하는 방법
관련 옵션
--noprofile을 지정하면 모든 프로필 파일을 읽지 않습니다.Bash가 로그인 셸이 아닌 대화형 셸로 시작되면 ~/.bashrc의 명령을 읽고 실행합니다. 예를 들어 별칭은 상위 셸에서 상속되지 않으므로 각 셸에서 정의할 수 있도록 이 파일에 넣는 것이 좋습니다.
시스템 전체에 적용되는 /etc/bash.bashrc 또는 이와 비슷한 설정 파일은 공급자나 배포판에서 수정한 Bash에 따라 지원 여부가 다릅니다. 전통적인 방법은 각 사용자의 ~/.bashrc에서 /etc/bashrc를 불러오는 것입니다.
대화형 셸인지 확인하는 방법
$-에 소문자 i가 포함되어 있는지 확인합니다.관련 옵션
-i는 대화형 모드로 실행합니다.--norc는 ~/.bashrc와 지원되는 시스템 시작 파일을 읽지 않습니다.--rcfile은 기본 시작 파일 대신 다른 파일을 지정합니다.Bash는 sh 호환 모드에서 POSIX 표준을 따르면서 오래된 sh의 시작 동작을 최대한 재현합니다. 로그인 셸이면 /etc/profile과 ~/.profile을 읽습니다.
로그인 셸이 아니면 환경 변수 ENV의 값을 해석해 얻은 파일 이름을 시작 파일로 사용합니다.
시작 파일을 읽은 뒤에는 POSIX 호환 실행 모드로 전환합니다. 이 모드는 시작 과정이 아니라 명령 실행에 적용됩니다.
sh 호환 모드로 시작하는 조건
argv[0]의 기본 파일 이름이 sh인 경우입니다. /bin/sh가 /bin/bash를 가리키더라도 일반 Bash와 똑같이 동작하는 것은 아닙니다.